package com.imooc.study.imoocstudy.ioencode;

import java.io.UnsupportedEncodingException;

/**
 * 文件的编码
 * @author Csa
 * @Time 2020/2/13
 */
public class EncodeDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String demoStr = "幕课abc";

        // 转换成字节序列用的是默认的utf-8
        byte[] byte1 = demoStr.getBytes();
        for(byte b:byte1){
            // 把字节（转换成了int）以16进制的方式显示
            System.out.print(Integer.toHexString(b &0xff)+"  ");
        }
        System.out.println();

        //gdk编码=========中文占用2个字节，英文占用1个字节
        byte[] byte2 = demoStr.getBytes("gbk");
        for(byte b:byte2){
            // 把字节（转换成了int）以16进制的方式显示
            System.out.print(Integer.toHexString(b &0xff)+"  ");
        }
        System.out.println();

        //utf-8编码=========中文占用3个字节，英文占用1个字节
        byte[] byte3 = demoStr.getBytes("utf-8");
        for(byte b:byte3){
            // 把字节（转换成了int）以16进制的方式显示
            System.out.print(Integer.toHexString(b &0xff)+"  ");
        }
        System.out.println();

        //java是双字节编码-utf-16be
        //utf-16be=========中文占用2个字节，英文占用2个字节
        byte[] byte4 = demoStr.getBytes("utf-16be");
        for(byte b:byte4){
            // 把字节（转换成了int）以16进制的方式显示
            System.out.print(Integer.toHexString(b &0xff)+"  ");
        }
        System.out.println();

        /**
         * 当你的字节序列是某种编码时，这个时候想要把字节序列变成字符串，也需要用这种编码方式，否则会出现乱码！
         */
        String badStr = new String(byte4);
        System.out.print(badStr);

        System.out.println();

        String goodStr = new String(byte4,"utf-16be");
        System.out.print(goodStr);

    }
}
